//package org.example;
//
//import org.example.entity.CustomerInfo;
//import org.example.entity.CustomerOrder;
//import org.example.entity.CustomerRepayPlan;
//import org.example.generator.DataGenerator;
//
//import java.time.LocalDate;
//import java.util.List;
//
///**
// * 测试订单状态和放款时间逻辑
// */
//public class TestOrderStatusAndFrTime {
//    public static void main(String[] args) {
//        System.out.println("=== 测试订单状态和放款时间逻辑 ===");
//
//        // 测试贷款金额精确到百位
//        testLoanAmountPrecision();
//
//        // 测试订单状态逻辑
//        testOrderStatusLogic();
//
//        // 测试放款时间格式
//        testFrTimeFormat();
//
//        // 测试未到期状态
//        testNotDueStatus();
//    }
//
//    /**
//     * 测试贷款金额精确到百位
//     */
//    private static void testLoanAmountPrecision() {
//        System.out.println("\n=== 贷款金额精确到百位测试 ===");
//
//        for (int i = 0; i < 10; i++) {
//            CustomerInfo customer = DataGenerator.generateCustomerInfo(LocalDate.of(2023, 8, 15));
//            CustomerOrder order = DataGenerator.generateCustomerOrder(customer, LocalDate.of(2023, 8, 15), "测试");
//
//            System.out.println("订单" + (i+1) + ": " + order.getLoanAmount());
//
//            // 验证是否精确到百位
//            double amount = order.getLoanAmount().doubleValue();
//            if (amount % 100 == 0) {
//                System.out.println("  ✓ 精确到百位");
//            } else {
//                System.out.println("  ✗ 未精确到百位");
//            }
//        }
//    }
//
//    /**
//     * 测试订单状态逻辑
//     */
//    private static void testOrderStatusLogic() {
//        System.out.println("\n=== 订单状态逻辑测试 ===");
//
//        for (int i = 0; i < 5; i++) {
//            CustomerInfo customer = DataGenerator.generateCustomerInfo(LocalDate.of(2023, 8, 15));
//            CustomerOrder order = DataGenerator.generateCustomerOrder(customer, LocalDate.of(2023, 8, 15), "测试");
//            List<CustomerRepayPlan> plans = DataGenerator.generateRepayPlan(order);
//
//            System.out.println("\n订单" + (i+1) + ":");
//            System.out.println("  订单号: " + order.getOrderNo());
//            System.out.println("  订单状态: " + order.getStatus());
//            System.out.println("  放款时间: " + order.getFrTime());
//
//            // 统计还款状态
//            long settledCount = plans.stream().filter(plan -> "已结清".equals(plan.getRepayStatus())).count();
//            long notDueCount = plans.stream().filter(plan -> "未到期".equals(plan.getRepayStatus())).count();
//            long overdueCount = plans.stream().filter(plan -> "逾期".equals(plan.getRepayStatus())).count();
//
//            System.out.println("  还款计划状态统计:");
//            System.out.println("    已结清: " + settledCount + "期");
//            System.out.println("    未到期: " + notDueCount + "期");
//            System.out.println("    逾期: " + overdueCount + "期");
//
//            // 验证订单状态逻辑
//            boolean allSettled = plans.stream().allMatch(plan -> "已结清".equals(plan.getRepayStatus()));
//            String expectedStatus = allSettled ? "已结清" : "未结清";
//
//            if (expectedStatus.equals(order.getStatus())) {
//                System.out.println("  ✓ 订单状态正确");
//            } else {
//                System.out.println("  ✗ 订单状态错误，期望: " + expectedStatus + "，实际: " + order.getStatus());
//            }
//        }
//    }
//
//    /**
//     * 测试放款时间格式
//     */
//    private static void testFrTimeFormat() {
//        System.out.println("\n=== 放款时间格式测试 ===");
//
//        for (int i = 0; i < 5; i++) {
//            CustomerInfo customer = DataGenerator.generateCustomerInfo(LocalDate.of(2023, 8, 15));
//            CustomerOrder order = DataGenerator.generateCustomerOrder(customer, LocalDate.of(2023, 8, 15), "测试");
//            List<CustomerRepayPlan> plans = DataGenerator.generateRepayPlan(order);
//
//            System.out.println("订单" + (i+1) + ":");
//            System.out.println("  放款时间: " + order.getFrTime());
//
//            // 验证格式是否为 yyyy-MM-dd
//            if (order.getFrTime().matches("\\d{4}-\\d{2}-\\d{2}")) {
//                System.out.println("  ✓ 格式正确");
//            } else {
//                System.out.println("  ✗ 格式错误");
//            }
//
//            // 显示实际还款日期
//            List<LocalDate> actualRepayDates = plans.stream()
//                    .filter(plan -> plan.getActualRepayDate() != null)
//                    .map(CustomerRepayPlan::getActualRepayDate)
//                    .sorted()
//                    .toList();
//
//            if (!actualRepayDates.isEmpty()) {
//                System.out.println("  实际还款日期: " + actualRepayDates);
//                System.out.println("  最后还款日期: " + actualRepayDates.get(actualRepayDates.size() - 1));
//            } else {
//                System.out.println("  无实际还款日期");
//            }
//        }
//    }
//
//    /**
//     * 测试未到期状态
//     */
//    private static void testNotDueStatus() {
//        System.out.println("\n=== 未到期状态测试 ===");
//
//        // 使用未来的放款日期来测试未到期状态
//        LocalDate futureLoanDate = LocalDate.now().plusMonths(1);
//
//        CustomerInfo customer = DataGenerator.generateCustomerInfo(futureLoanDate);
//        CustomerOrder order = DataGenerator.generateCustomerOrder(customer, futureLoanDate, "测试");
//        List<CustomerRepayPlan> plans = DataGenerator.generateRepayPlan(order);
//
//        System.out.println("未来放款订单:");
//        System.out.println("  订单号: " + order.getOrderNo());
//        System.out.println("  放款日期: " + futureLoanDate);
//        System.out.println("  当前日期: " + LocalDate.now());
//        System.out.println("  订单状态: " + order.getStatus());
//
//        // 统计未到期状态
//        long notDueCount = plans.stream().filter(plan -> "未到期".equals(plan.getRepayStatus())).count();
//        long settledCount = plans.stream().filter(plan -> "已结清".equals(plan.getRepayStatus())).count();
//        long overdueCount = plans.stream().filter(plan -> "逾期".equals(plan.getRepayStatus())).count();
//
//        System.out.println("  还款计划状态:");
//        System.out.println("    未到期: " + notDueCount + "期");
//        System.out.println("    已结清: " + settledCount + "期");
//        System.out.println("    逾期: " + overdueCount + "期");
//
//        // 显示前几期的详情
//        System.out.println("  前3期详情:");
//        for (int i = 0; i < Math.min(3, plans.size()); i++) {
//            CustomerRepayPlan plan = plans.get(i);
//            System.out.printf("    期数%d: 应还日期=%s, 状态=%s, 当前日期=%s\n",
//                    plan.getBillTenor(),
//                    plan.getDueDate(),
//                    plan.getRepayStatus(),
//                    LocalDate.now());
//        }
//    }
//}






